/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.controlador;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.abstracts.ControladorAbstract;
import sv.com.intesal.seguridad.bean.Usuario;
import sv.com.intesal.seguridad.sql.SQLUsuario;

/**
 *
 * @author ejerez
 */
public class UsuarioControlador extends ControladorAbstract {

    public void insert(Usuario u) throws Exception {
        try {
            super.setPreparedStatement(SQLUsuario.insert);
            super.ps.setInt(1, u.getCodigo_e());
            super.ps.setString(2, u.getNombre_u());
            super.ps.setString(3, u.getClave_u());
            super.ps.setString(4, v.getEstado(u.getEstado_filtro_u()));
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public void update(Usuario u) throws Exception {
        try {
            super.setPreparedStatement(SQLUsuario.update);
            super.ps.setInt(1, u.getCodigo_e());
            super.ps.setString(2, u.getNombre_u());
            super.ps.setString(3, u.getClave_u());
            super.ps.setString(4, v.getEstado(u.getEstado_filtro_u()));
            super.ps.setInt(5, u.getCodigo_u());
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public void updateUsuarioClave(Usuario u) throws Exception {
        try {
            super.setPreparedStatement(SQLUsuario.updateClaveUsuario);
            super.ps.setString(1, u.getClave_u());
            super.ps.setInt(2, u.getCodigo_u());
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Usuario> getUsuarios() throws Exception {
        List<Usuario> lista = new ArrayList<Usuario>();
        try {
            super.getExecuteQuery(SQLUsuario.getUsuario);
            while (super.rs.next()) {
                lista.add(this.getUsuario(super.rs));
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private Usuario getUsuario(ResultSet rs) throws Exception {
        try {
            Usuario u = new Usuario();

            u.setCodigo_u(rs.getInt("codigo_u"));
            u.setNombre_u(rs.getString("nombre_u"));
            u.setClave_u(rs.getString("clave_u"));
            u.setClave_confirmar_u(rs.getString("clave_u"));
            u.setEstado_u(rs.getString("estado_u"));
            u.setEstado_filtro_u(v.getEstado(rs.getString("estado_u")));

            /*EMPLEADO*/
            u.setCodigo_e(rs.getInt("codigo_e"));
            u.setNombre_e(rs.getString("nombre_e") + " " + rs.getString("apellido_e"));

            return u;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public Boolean validarUserCount(Usuario u) throws Exception {

        try {
            Integer count = null;
            super.setPreparedStatement(SQLUsuario.getCountUser);
            super.ps.setString(1, u.getNombre_u());
            super.rs = super.ps.executeQuery();

            super.rs.next();
            if (rs.getInt("contar") == 0) {
                return true;
            }
            return false;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public Boolean validarCodigo_Usuario(Usuario u) throws Exception {

        try {
            Integer count = null;
            super.setPreparedStatement(SQLUsuario.getCountEmpleado);
            super.ps.setString(1, u.getNombre_u());
            super.ps.setInt(2, u.getCodigo_u());
            super.rs = super.ps.executeQuery();

            super.rs.next();
            if (rs.getInt("contar") == 0) {
                return false;
            }
            return true;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public Usuario getUsuario_x_Empleado(Integer codigo_e) throws Exception {
        try {
            super.setPreparedStatement(SQLUsuario.getUsuario_x_Empleado);
            super.ps.setInt(1, codigo_e);
            super.rs = super.ps.executeQuery();

            while (rs.next()) {
                return this.getUsuario(super.rs);
            }
            return null;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private ResultSet getUsuario(Integer codigo_u) throws Exception {
        try {
            super.setPreparedStatement(SQLUsuario.getUsuario_x_Codigo);
            super.ps.setInt(1, codigo_u);
            super.getExecuteQuery(super.ps);
            super.rs.next();
            return super.rs;

        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public Boolean validarClaveUsuario(Usuario u) throws Exception {
        try {
//            SessionControlador sc = new SessionControlador();
            //Usuario us = this.getUsuario(sc.getCodigo_Usuario());
            Usuario us = this.getUsuario(this.getUsuario(1));

            if (u.getClave_old_u().toString().equals(us.getClave_u().toString())) {
                return true;
            }
            return false;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }
}
